# _*_coding:utf-8 _*_
# @Time    :2019/11/29 13:44
# @Author  :Dapan

# 关于用户资料模块的接口
from ihome import db
from ihome.utils.image_store import storage
from ihome.utils.response_code import RET
from . import api
from ihome.utils.commons import login_required
from flask import g,current_app,jsonify,request
from ihome.models import User




@api.route('/users/avatar', methods=['POST'])
@login_required
def set_user_avatar():
    """
    设置用户头像
    参数： 1、图片内容（多媒体表单格式）2、用户id （g.user_id）
    """
    # 装饰器的代码已经将user_id 保存到g对象中，所以可以直接读取
    user_id = g.user_id

    # 获取图片数据
    image_file = request.files.get('avatar')

    if image_file is None:
        return jsonify(errno=RET.PARAMERR, errmsg='未上传图片')

    image_data = image_file.read()

    # 调用七牛上传图片数据
    try:
        file_name = storage(image_data)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(error=RET.THIRDERR,errmsg="上传图片失败")
    # 保存文件名到数据库中
    try:
        User.query.filter_by(id=user_id).update({'avatar_url':file_name})
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR,errmsg='保存图片信息失败')

    # 保存成功返回
    avatar_url = current_app.config.get('QINIU_URL_DOMAIN') + file_name
    print(avatar_url)
    return jsonify(errno=RET.OK,errmsg='图片保存成功',data={'avatar_url':avatar_url})



@api.route('/users/name', methods=['PUT'])
@login_required
def modify_user_name():
    """修改用户名
    参数：1，新用户名"""
    # 装饰器的代码已经将user_id 保存到g对象中，所以可以直接读取
    # 获取到用户id
    user_id = g.user_id
    print(user_id)

    # 1、拿到请求中携带的 新用户名
    req_data = request.get_json()
    if not req_data:
        return jsonify(errno=RET.PARAMERR,errmsg='参数不完整')
    name = req_data.get('name')
    if not name:
        return jsonify(errno=RET.PARAMERR,errmsg="名字不能为空")
    # 2、 # 保存用户昵称name，并同时判断name是否重复（利用数据库的唯一索引)
    try:
        User.query.filter_by(id=user_id).update({'name': name})
        db.session.commit()
    except Exception as e:
        db.session.rollback()
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg='修改用户名失败')
    # 3、返回保存状态信息
    return jsonify(errno=RET.OK, errmsg='用户名修改成功')



@api.route("/user", methods=["GET"])
@login_required
def get_user_profile():
    """获取个人信息"""
    user_id = g.user_id
    # 查询数据库获取个人信息
    try:
        user = User.query.get(user_id)
    except Exception as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.DBERR, errmsg="获取用户信息失败")

    if user is None:
        return jsonify(errno=RET.NODATA, errmsg="无效操作")

    return jsonify(errno=RET.OK, errmsg="OK", data=user.to_dict())